package modelo;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Collections;
import java.util.LinkedList;
import static modelo.SetUps.PATH_PUNT;
import static modelo.SetUps.N_PUNTAJES;

public class MejoresPuntajes {
	
	LinkedList<PuntajeNombre> listaOrdenada;
	
	public MejoresPuntajes(){
		listaOrdenada = new LinkedList<PuntajeNombre>();
		try {
			this.cargar();
		}
		catch (Exception e){
			//No pasa nada si no existe el archivo
		}
	}
	
	public File getArchivo(){
		return new File(PATH_PUNT);
	}
	
	public void cargar() throws IOException{
		String s;
		FileReader reader = new FileReader(this.getArchivo());	
		BufferedReader lineReader = new BufferedReader(reader);
		while ((s = lineReader.readLine()) != null)   {
			listaOrdenada.addLast(PuntajeNombre.parsePuntajeNombre(s));	
		}
		lineReader.close();
		reader.close();		
	}

	public void guardar() throws IOException{
		FileWriter writer = new FileWriter(this.getArchivo());
		writer.write(this.toString());	
		writer.close();
	}
	
	public String toString(){
		String s = "";
		for (PuntajeNombre punt : listaOrdenada){
			s = s.concat(punt.toString()+"\n");
		}
		return s;
	}
	
	//Devuelve true si el puntaje mandado califica para mejor puntaje
	public boolean califica(PuntajeNombre punt){
		if (listaOrdenada.size() < N_PUNTAJES) return true;
		if (punt.compareTo(listaOrdenada.getFirst()) > 0) return true;
		return false;
	}
	
	public void agregar(PuntajeNombre punt){
		if (listaOrdenada.size() == N_PUNTAJES) listaOrdenada.removeFirst();
		listaOrdenada.addFirst(punt);
		Collections.sort(listaOrdenada);
	}
	
}
